/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package ch.uzh.ifi.seal.ssqa.model.impl;

import ch.uzh.ifi.seal.ssqa.model.Action;
import ch.uzh.ifi.seal.ssqa.model.Issue;
import ch.uzh.ifi.seal.ssqa.model.ModelPackage;
import ch.uzh.ifi.seal.ssqa.model.Note;
import ch.uzh.ifi.seal.ssqa.model.Person;
import ch.uzh.ifi.seal.ssqa.model.TimeTracking;
import ch.uzh.ifi.seal.ssqa.model.UcmActivity;

import java.util.Collection;

import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;

import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;

import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.EObjectResolvingEList;
import org.eclipse.emf.ecore.util.InternalEList;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Issue</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getId <em>Id</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getHeadline <em>Headline</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getFoundInVersion <em>Found In Version</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#isReproducible <em>Reproducible</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getType <em>Type</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getPlatform <em>Platform</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getLocation <em>Location</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getDiscipline <em>Discipline</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getProduct <em>Product</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getAssembly <em>Assembly</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getPriority <em>Priority</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getSeverity <em>Severity</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getOriginator <em>Originator</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getSubmitter <em>Submitter</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getOwner <em>Owner</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getDescription <em>Description</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getParent <em>Parent</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getChildren <em>Children</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getTimeTracking <em>Time Tracking</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getUCM <em>UCM</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getNotes <em>Notes</em>}</li>
 *   <li>{@link ch.uzh.ifi.seal.ssqa.model.impl.IssueImpl#getActions <em>Actions</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class IssueImpl extends EObjectImpl implements Issue {
	/**
	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getId()
	 * @generated
	 * @ordered
	 */
	protected static final String ID_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getId()
	 * @generated
	 * @ordered
	 */
	protected String id = ID_EDEFAULT;

	/**
	 * The default value of the '{@link #getHeadline() <em>Headline</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeadline()
	 * @generated
	 * @ordered
	 */
	protected static final String HEADLINE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getHeadline() <em>Headline</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHeadline()
	 * @generated
	 * @ordered
	 */
	protected String headline = HEADLINE_EDEFAULT;

	/**
	 * The default value of the '{@link #getFoundInVersion() <em>Found In Version</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getFoundInVersion()
	 * @generated
	 * @ordered
	 */
	protected static final String FOUND_IN_VERSION_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getFoundInVersion() <em>Found In Version</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getFoundInVersion()
	 * @generated
	 * @ordered
	 */
	protected String foundInVersion = FOUND_IN_VERSION_EDEFAULT;

	/**
	 * The default value of the '{@link #isReproducible() <em>Reproducible</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #isReproducible()
	 * @generated
	 * @ordered
	 */
	protected static final boolean REPRODUCIBLE_EDEFAULT = false;

	/**
	 * The cached value of the '{@link #isReproducible() <em>Reproducible</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #isReproducible()
	 * @generated
	 * @ordered
	 */
	protected boolean reproducible = REPRODUCIBLE_EDEFAULT;

	/**
	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getType()
	 * @generated
	 * @ordered
	 */
	protected static final String TYPE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getType()
	 * @generated
	 * @ordered
	 */
	protected String type = TYPE_EDEFAULT;

	/**
	 * The default value of the '{@link #getPlatform() <em>Platform</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPlatform()
	 * @generated
	 * @ordered
	 */
	protected static final String PLATFORM_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getPlatform() <em>Platform</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPlatform()
	 * @generated
	 * @ordered
	 */
	protected String platform = PLATFORM_EDEFAULT;

	/**
	 * The default value of the '{@link #getLocation() <em>Location</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getLocation()
	 * @generated
	 * @ordered
	 */
	protected static final String LOCATION_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getLocation() <em>Location</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getLocation()
	 * @generated
	 * @ordered
	 */
	protected String location = LOCATION_EDEFAULT;

	/**
	 * The default value of the '{@link #getDiscipline() <em>Discipline</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDiscipline()
	 * @generated
	 * @ordered
	 */
	protected static final String DISCIPLINE_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getDiscipline() <em>Discipline</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDiscipline()
	 * @generated
	 * @ordered
	 */
	protected String discipline = DISCIPLINE_EDEFAULT;

	/**
	 * The default value of the '{@link #getProduct() <em>Product</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getProduct()
	 * @generated
	 * @ordered
	 */
	protected static final String PRODUCT_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getProduct() <em>Product</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getProduct()
	 * @generated
	 * @ordered
	 */
	protected String product = PRODUCT_EDEFAULT;

	/**
	 * The default value of the '{@link #getAssembly() <em>Assembly</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAssembly()
	 * @generated
	 * @ordered
	 */
	protected static final String ASSEMBLY_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getAssembly() <em>Assembly</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAssembly()
	 * @generated
	 * @ordered
	 */
	protected String assembly = ASSEMBLY_EDEFAULT;

	/**
	 * The default value of the '{@link #getPriority() <em>Priority</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPriority()
	 * @generated
	 * @ordered
	 */
	protected static final String PRIORITY_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getPriority() <em>Priority</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getPriority()
	 * @generated
	 * @ordered
	 */
	protected String priority = PRIORITY_EDEFAULT;

	/**
	 * The default value of the '{@link #getSeverity() <em>Severity</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSeverity()
	 * @generated
	 * @ordered
	 */
	protected static final String SEVERITY_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getSeverity() <em>Severity</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSeverity()
	 * @generated
	 * @ordered
	 */
	protected String severity = SEVERITY_EDEFAULT;

	/**
	 * The cached value of the '{@link #getOriginator() <em>Originator</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOriginator()
	 * @generated
	 * @ordered
	 */
	protected Person originator;

	/**
	 * The cached value of the '{@link #getSubmitter() <em>Submitter</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSubmitter()
	 * @generated
	 * @ordered
	 */
	protected Person submitter;

	/**
	 * The cached value of the '{@link #getOwner() <em>Owner</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOwner()
	 * @generated
	 * @ordered
	 */
	protected Person owner;

	/**
	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescription()
	 * @generated
	 * @ordered
	 */
	protected static final String DESCRIPTION_EDEFAULT = null;

	/**
	 * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDescription()
	 * @generated
	 * @ordered
	 */
	protected String description = DESCRIPTION_EDEFAULT;

	/**
	 * The cached value of the '{@link #getParent() <em>Parent</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getParent()
	 * @generated
	 * @ordered
	 */
	protected Issue parent;

	/**
	 * The cached value of the '{@link #getChildren() <em>Children</em>}' containment reference list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getChildren()
	 * @generated
	 * @ordered
	 */
	protected EList<Issue> children;

	/**
	 * The cached value of the '{@link #getTimeTracking() <em>Time Tracking</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTimeTracking()
	 * @generated
	 * @ordered
	 */
	protected TimeTracking timeTracking;

	/**
	 * The cached value of the '{@link #getUCM() <em>UCM</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getUCM()
	 * @generated
	 * @ordered
	 */
	protected UcmActivity uCM;

	/**
	 * The cached value of the '{@link #getNotes() <em>Notes</em>}' reference list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getNotes()
	 * @generated
	 * @ordered
	 */
	protected EList<Note> notes;

	/**
	 * The cached value of the '{@link #getActions() <em>Actions</em>}' containment reference list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getActions()
	 * @generated
	 * @ordered
	 */
	protected EList<Action> actions;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IssueImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return ModelPackage.Literals.ISSUE;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getId() {
		return id;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setId(String newId) {
		String oldId = id;
		id = newId;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__ID, oldId, id));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getHeadline() {
		return headline;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHeadline(String newHeadline) {
		String oldHeadline = headline;
		headline = newHeadline;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__HEADLINE, oldHeadline, headline));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getFoundInVersion() {
		return foundInVersion;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setFoundInVersion(String newFoundInVersion) {
		String oldFoundInVersion = foundInVersion;
		foundInVersion = newFoundInVersion;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__FOUND_IN_VERSION, oldFoundInVersion, foundInVersion));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public boolean isReproducible() {
		return reproducible;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setReproducible(boolean newReproducible) {
		boolean oldReproducible = reproducible;
		reproducible = newReproducible;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__REPRODUCIBLE, oldReproducible, reproducible));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getType() {
		return type;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setType(String newType) {
		String oldType = type;
		type = newType;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__TYPE, oldType, type));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getPlatform() {
		return platform;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPlatform(String newPlatform) {
		String oldPlatform = platform;
		platform = newPlatform;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__PLATFORM, oldPlatform, platform));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getLocation() {
		return location;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setLocation(String newLocation) {
		String oldLocation = location;
		location = newLocation;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__LOCATION, oldLocation, location));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getDiscipline() {
		return discipline;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDiscipline(String newDiscipline) {
		String oldDiscipline = discipline;
		discipline = newDiscipline;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__DISCIPLINE, oldDiscipline, discipline));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getProduct() {
		return product;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setProduct(String newProduct) {
		String oldProduct = product;
		product = newProduct;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__PRODUCT, oldProduct, product));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getAssembly() {
		return assembly;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAssembly(String newAssembly) {
		String oldAssembly = assembly;
		assembly = newAssembly;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__ASSEMBLY, oldAssembly, assembly));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getPriority() {
		return priority;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setPriority(String newPriority) {
		String oldPriority = priority;
		priority = newPriority;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__PRIORITY, oldPriority, priority));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getSeverity() {
		return severity;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSeverity(String newSeverity) {
		String oldSeverity = severity;
		severity = newSeverity;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__SEVERITY, oldSeverity, severity));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Person getOriginator() {
		if (originator != null && originator.eIsProxy()) {
			InternalEObject oldOriginator = (InternalEObject)originator;
			originator = (Person)eResolveProxy(oldOriginator);
			if (originator != oldOriginator) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.ISSUE__ORIGINATOR, oldOriginator, originator));
			}
		}
		return originator;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Person basicGetOriginator() {
		return originator;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOriginator(Person newOriginator) {
		Person oldOriginator = originator;
		originator = newOriginator;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__ORIGINATOR, oldOriginator, originator));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Person getSubmitter() {
		if (submitter != null && submitter.eIsProxy()) {
			InternalEObject oldSubmitter = (InternalEObject)submitter;
			submitter = (Person)eResolveProxy(oldSubmitter);
			if (submitter != oldSubmitter) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.ISSUE__SUBMITTER, oldSubmitter, submitter));
			}
		}
		return submitter;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Person basicGetSubmitter() {
		return submitter;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSubmitter(Person newSubmitter) {
		Person oldSubmitter = submitter;
		submitter = newSubmitter;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__SUBMITTER, oldSubmitter, submitter));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Person getOwner() {
		if (owner != null && owner.eIsProxy()) {
			InternalEObject oldOwner = (InternalEObject)owner;
			owner = (Person)eResolveProxy(oldOwner);
			if (owner != oldOwner) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.ISSUE__OWNER, oldOwner, owner));
			}
		}
		return owner;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Person basicGetOwner() {
		return owner;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOwner(Person newOwner) {
		Person oldOwner = owner;
		owner = newOwner;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__OWNER, oldOwner, owner));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDescription(String newDescription) {
		String oldDescription = description;
		description = newDescription;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__DESCRIPTION, oldDescription, description));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Issue getParent() {
		if (parent != null && parent.eIsProxy()) {
			InternalEObject oldParent = (InternalEObject)parent;
			parent = (Issue)eResolveProxy(oldParent);
			if (parent != oldParent) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.ISSUE__PARENT, oldParent, parent));
			}
		}
		return parent;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Issue basicGetParent() {
		return parent;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParent(Issue newParent) {
		Issue oldParent = parent;
		parent = newParent;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__PARENT, oldParent, parent));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Issue> getChildren() {
		if (children == null) {
			children = new EObjectContainmentEList<Issue>(Issue.class, this, ModelPackage.ISSUE__CHILDREN);
		}
		return children;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TimeTracking getTimeTracking() {
		if (timeTracking != null && timeTracking.eIsProxy()) {
			InternalEObject oldTimeTracking = (InternalEObject)timeTracking;
			timeTracking = (TimeTracking)eResolveProxy(oldTimeTracking);
			if (timeTracking != oldTimeTracking) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.ISSUE__TIME_TRACKING, oldTimeTracking, timeTracking));
			}
		}
		return timeTracking;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TimeTracking basicGetTimeTracking() {
		return timeTracking;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTimeTracking(TimeTracking newTimeTracking) {
		TimeTracking oldTimeTracking = timeTracking;
		timeTracking = newTimeTracking;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__TIME_TRACKING, oldTimeTracking, timeTracking));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public UcmActivity getUCM() {
		if (uCM != null && uCM.eIsProxy()) {
			InternalEObject oldUCM = (InternalEObject)uCM;
			uCM = (UcmActivity)eResolveProxy(oldUCM);
			if (uCM != oldUCM) {
				if (eNotificationRequired())
					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ModelPackage.ISSUE__UCM, oldUCM, uCM));
			}
		}
		return uCM;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public UcmActivity basicGetUCM() {
		return uCM;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setUCM(UcmActivity newUCM) {
		UcmActivity oldUCM = uCM;
		uCM = newUCM;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ModelPackage.ISSUE__UCM, oldUCM, uCM));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Note> getNotes() {
		if (notes == null) {
			notes = new EObjectResolvingEList<Note>(Note.class, this, ModelPackage.ISSUE__NOTES);
		}
		return notes;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Action> getActions() {
		if (actions == null) {
			actions = new EObjectContainmentEList<Action>(Action.class, this, ModelPackage.ISSUE__ACTIONS);
		}
		return actions;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
		switch (featureID) {
			case ModelPackage.ISSUE__CHILDREN:
				return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
			case ModelPackage.ISSUE__ACTIONS:
				return ((InternalEList<?>)getActions()).basicRemove(otherEnd, msgs);
		}
		return super.eInverseRemove(otherEnd, featureID, msgs);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case ModelPackage.ISSUE__ID:
				return getId();
			case ModelPackage.ISSUE__HEADLINE:
				return getHeadline();
			case ModelPackage.ISSUE__FOUND_IN_VERSION:
				return getFoundInVersion();
			case ModelPackage.ISSUE__REPRODUCIBLE:
				return isReproducible();
			case ModelPackage.ISSUE__TYPE:
				return getType();
			case ModelPackage.ISSUE__PLATFORM:
				return getPlatform();
			case ModelPackage.ISSUE__LOCATION:
				return getLocation();
			case ModelPackage.ISSUE__DISCIPLINE:
				return getDiscipline();
			case ModelPackage.ISSUE__PRODUCT:
				return getProduct();
			case ModelPackage.ISSUE__ASSEMBLY:
				return getAssembly();
			case ModelPackage.ISSUE__PRIORITY:
				return getPriority();
			case ModelPackage.ISSUE__SEVERITY:
				return getSeverity();
			case ModelPackage.ISSUE__ORIGINATOR:
				if (resolve) return getOriginator();
				return basicGetOriginator();
			case ModelPackage.ISSUE__SUBMITTER:
				if (resolve) return getSubmitter();
				return basicGetSubmitter();
			case ModelPackage.ISSUE__OWNER:
				if (resolve) return getOwner();
				return basicGetOwner();
			case ModelPackage.ISSUE__DESCRIPTION:
				return getDescription();
			case ModelPackage.ISSUE__PARENT:
				if (resolve) return getParent();
				return basicGetParent();
			case ModelPackage.ISSUE__CHILDREN:
				return getChildren();
			case ModelPackage.ISSUE__TIME_TRACKING:
				if (resolve) return getTimeTracking();
				return basicGetTimeTracking();
			case ModelPackage.ISSUE__UCM:
				if (resolve) return getUCM();
				return basicGetUCM();
			case ModelPackage.ISSUE__NOTES:
				return getNotes();
			case ModelPackage.ISSUE__ACTIONS:
				return getActions();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case ModelPackage.ISSUE__ID:
				setId((String)newValue);
				return;
			case ModelPackage.ISSUE__HEADLINE:
				setHeadline((String)newValue);
				return;
			case ModelPackage.ISSUE__FOUND_IN_VERSION:
				setFoundInVersion((String)newValue);
				return;
			case ModelPackage.ISSUE__REPRODUCIBLE:
				setReproducible((Boolean)newValue);
				return;
			case ModelPackage.ISSUE__TYPE:
				setType((String)newValue);
				return;
			case ModelPackage.ISSUE__PLATFORM:
				setPlatform((String)newValue);
				return;
			case ModelPackage.ISSUE__LOCATION:
				setLocation((String)newValue);
				return;
			case ModelPackage.ISSUE__DISCIPLINE:
				setDiscipline((String)newValue);
				return;
			case ModelPackage.ISSUE__PRODUCT:
				setProduct((String)newValue);
				return;
			case ModelPackage.ISSUE__ASSEMBLY:
				setAssembly((String)newValue);
				return;
			case ModelPackage.ISSUE__PRIORITY:
				setPriority((String)newValue);
				return;
			case ModelPackage.ISSUE__SEVERITY:
				setSeverity((String)newValue);
				return;
			case ModelPackage.ISSUE__ORIGINATOR:
				setOriginator((Person)newValue);
				return;
			case ModelPackage.ISSUE__SUBMITTER:
				setSubmitter((Person)newValue);
				return;
			case ModelPackage.ISSUE__OWNER:
				setOwner((Person)newValue);
				return;
			case ModelPackage.ISSUE__DESCRIPTION:
				setDescription((String)newValue);
				return;
			case ModelPackage.ISSUE__PARENT:
				setParent((Issue)newValue);
				return;
			case ModelPackage.ISSUE__CHILDREN:
				getChildren().clear();
				getChildren().addAll((Collection<? extends Issue>)newValue);
				return;
			case ModelPackage.ISSUE__TIME_TRACKING:
				setTimeTracking((TimeTracking)newValue);
				return;
			case ModelPackage.ISSUE__UCM:
				setUCM((UcmActivity)newValue);
				return;
			case ModelPackage.ISSUE__NOTES:
				getNotes().clear();
				getNotes().addAll((Collection<? extends Note>)newValue);
				return;
			case ModelPackage.ISSUE__ACTIONS:
				getActions().clear();
				getActions().addAll((Collection<? extends Action>)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case ModelPackage.ISSUE__ID:
				setId(ID_EDEFAULT);
				return;
			case ModelPackage.ISSUE__HEADLINE:
				setHeadline(HEADLINE_EDEFAULT);
				return;
			case ModelPackage.ISSUE__FOUND_IN_VERSION:
				setFoundInVersion(FOUND_IN_VERSION_EDEFAULT);
				return;
			case ModelPackage.ISSUE__REPRODUCIBLE:
				setReproducible(REPRODUCIBLE_EDEFAULT);
				return;
			case ModelPackage.ISSUE__TYPE:
				setType(TYPE_EDEFAULT);
				return;
			case ModelPackage.ISSUE__PLATFORM:
				setPlatform(PLATFORM_EDEFAULT);
				return;
			case ModelPackage.ISSUE__LOCATION:
				setLocation(LOCATION_EDEFAULT);
				return;
			case ModelPackage.ISSUE__DISCIPLINE:
				setDiscipline(DISCIPLINE_EDEFAULT);
				return;
			case ModelPackage.ISSUE__PRODUCT:
				setProduct(PRODUCT_EDEFAULT);
				return;
			case ModelPackage.ISSUE__ASSEMBLY:
				setAssembly(ASSEMBLY_EDEFAULT);
				return;
			case ModelPackage.ISSUE__PRIORITY:
				setPriority(PRIORITY_EDEFAULT);
				return;
			case ModelPackage.ISSUE__SEVERITY:
				setSeverity(SEVERITY_EDEFAULT);
				return;
			case ModelPackage.ISSUE__ORIGINATOR:
				setOriginator((Person)null);
				return;
			case ModelPackage.ISSUE__SUBMITTER:
				setSubmitter((Person)null);
				return;
			case ModelPackage.ISSUE__OWNER:
				setOwner((Person)null);
				return;
			case ModelPackage.ISSUE__DESCRIPTION:
				setDescription(DESCRIPTION_EDEFAULT);
				return;
			case ModelPackage.ISSUE__PARENT:
				setParent((Issue)null);
				return;
			case ModelPackage.ISSUE__CHILDREN:
				getChildren().clear();
				return;
			case ModelPackage.ISSUE__TIME_TRACKING:
				setTimeTracking((TimeTracking)null);
				return;
			case ModelPackage.ISSUE__UCM:
				setUCM((UcmActivity)null);
				return;
			case ModelPackage.ISSUE__NOTES:
				getNotes().clear();
				return;
			case ModelPackage.ISSUE__ACTIONS:
				getActions().clear();
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case ModelPackage.ISSUE__ID:
				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
			case ModelPackage.ISSUE__HEADLINE:
				return HEADLINE_EDEFAULT == null ? headline != null : !HEADLINE_EDEFAULT.equals(headline);
			case ModelPackage.ISSUE__FOUND_IN_VERSION:
				return FOUND_IN_VERSION_EDEFAULT == null ? foundInVersion != null : !FOUND_IN_VERSION_EDEFAULT.equals(foundInVersion);
			case ModelPackage.ISSUE__REPRODUCIBLE:
				return reproducible != REPRODUCIBLE_EDEFAULT;
			case ModelPackage.ISSUE__TYPE:
				return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
			case ModelPackage.ISSUE__PLATFORM:
				return PLATFORM_EDEFAULT == null ? platform != null : !PLATFORM_EDEFAULT.equals(platform);
			case ModelPackage.ISSUE__LOCATION:
				return LOCATION_EDEFAULT == null ? location != null : !LOCATION_EDEFAULT.equals(location);
			case ModelPackage.ISSUE__DISCIPLINE:
				return DISCIPLINE_EDEFAULT == null ? discipline != null : !DISCIPLINE_EDEFAULT.equals(discipline);
			case ModelPackage.ISSUE__PRODUCT:
				return PRODUCT_EDEFAULT == null ? product != null : !PRODUCT_EDEFAULT.equals(product);
			case ModelPackage.ISSUE__ASSEMBLY:
				return ASSEMBLY_EDEFAULT == null ? assembly != null : !ASSEMBLY_EDEFAULT.equals(assembly);
			case ModelPackage.ISSUE__PRIORITY:
				return PRIORITY_EDEFAULT == null ? priority != null : !PRIORITY_EDEFAULT.equals(priority);
			case ModelPackage.ISSUE__SEVERITY:
				return SEVERITY_EDEFAULT == null ? severity != null : !SEVERITY_EDEFAULT.equals(severity);
			case ModelPackage.ISSUE__ORIGINATOR:
				return originator != null;
			case ModelPackage.ISSUE__SUBMITTER:
				return submitter != null;
			case ModelPackage.ISSUE__OWNER:
				return owner != null;
			case ModelPackage.ISSUE__DESCRIPTION:
				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
			case ModelPackage.ISSUE__PARENT:
				return parent != null;
			case ModelPackage.ISSUE__CHILDREN:
				return children != null && !children.isEmpty();
			case ModelPackage.ISSUE__TIME_TRACKING:
				return timeTracking != null;
			case ModelPackage.ISSUE__UCM:
				return uCM != null;
			case ModelPackage.ISSUE__NOTES:
				return notes != null && !notes.isEmpty();
			case ModelPackage.ISSUE__ACTIONS:
				return actions != null && !actions.isEmpty();
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (id: ");
		result.append(id);
		result.append(", headline: ");
		result.append(headline);
		result.append(", foundInVersion: ");
		result.append(foundInVersion);
		result.append(", reproducible: ");
		result.append(reproducible);
		result.append(", type: ");
		result.append(type);
		result.append(", platform: ");
		result.append(platform);
		result.append(", location: ");
		result.append(location);
		result.append(", discipline: ");
		result.append(discipline);
		result.append(", product: ");
		result.append(product);
		result.append(", assembly: ");
		result.append(assembly);
		result.append(", priority: ");
		result.append(priority);
		result.append(", severity: ");
		result.append(severity);
		result.append(", description: ");
		result.append(description);
		result.append(')');
		return result.toString();
	}

} //IssueImpl
